<?xml version = '1.0' encoding = 'UTF-8'?>
<HBRRepo><variables><variable name="OQP_Scenario" type="member" usage="const" id="3" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Scenario</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_SCENARIO</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable><variable name="OQP_Territory" type="member" usage="const" id="1" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Territory</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_TERRITORY</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable><variable name="OQP_Version" type="member" usage="const" id="2" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Version</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_VERSION</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable></variables><rulesets/><rules><rule id="1" name="OQP_BottomUp Seasonality" product="Planning"><property name="application">SalesPln</property><property name="plantype">OEP_QTP</property><property name="seeded">true</property><variable_references><variable_reference name="OQP_Scenario" id="3"><property name="application">SalesPln</property><property name="hidden">true</property><property name="rule_name">OQP_BottomUp Seasonality</property><property name="seq">1</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">OEP_Plan</property></variable_reference><variable_reference name="OQP_Territory" id="1"><property name="application">SalesPln</property><property name="hidden">true</property><property name="rule_name">OQP_BottomUp Seasonality</property><property name="seq">2</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">"OEP_Any Territory"</property></variable_reference><variable_reference name="OQP_Version" id="2"><property name="application">SalesPln</property><property name="hidden">true</property><property name="rule_name">OQP_BottomUp Seasonality</property><property name="seq">3</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">OEP_Working</property></variable_reference></variable_references><script type="groovy">					/*RTPS:{OQP_Territory} {OQP_Version} {OQP_Scenario} */
        /*PURPOSE: This business rules applies seasonality percenatages on Quota amount and aggregates across all dimension for given territory */
			String entity = rtps.OQP_Territory.member.name;
			String Scenario=rtps.OQP_Scenario.member.name;
			String Version=rtps.OQP_Version.member.name;			
			String strCrossDim = "";
			try
			{
			def grid=operation.grid;
			List&lt;String> CustomDimensions=[];
			List&lt;String> CustomRelDimensions=[];
			List&lt;String> povDimensions=[];
			StringBuilder cscript = new StringBuilder();
			cscript.append('''SET AGGMISSG ON;\n''');
			cscript.append('''SET UPDATECALC OFF;\n''');
			Application app=operation.getApplication();
			List&lt;DataGrid.HeaderCell> povs = grid.getPov()
			for (DataGrid.HeaderCell pov : povs) {
				String mbrName=pov.getMbrName()
				String dimName=pov.getDimName()
			   if (!mbrName.equals(Scenario) &amp;&amp; !mbrName.equals(Version) &amp;&amp; !pov.getDimensionType().equals(DimensionType.SIMPLE_CURRENCY) &amp;&amp; !mbrName.equals(entity) )
				{
					if (!dimName.equals("Years"))
					{
						strCrossDim= strCrossDim + "\""+ mbrName+"\"->"
						CustomDimensions.add('''"'''+dimName+'''"''')
						CustomRelDimensions.add('''@Relative("'''+dimName+'''",0)''')
					}
					
				}
				
			}
            Double dblSeasonality=0;
            List&lt;DataGrid.Row> rows =grid.getRows();				
				for (DataGrid.Row row : rows) 
				{                	
					List&lt;DataGrid.DataCell> subRows = row.getData();
					for(DataGrid.DataCell cell : subRows) 
					{  
                    	String periodName=cell.getPeriodName();
                        if(periodName.equals("YearTotal"))
                        {
                       	 	String EntityName =cell.getEntityName();
                            if (EntityName.equals(entity))
                            {
                            	dblSeasonality=cell.getData()
                            }
                        
                        }                    
                    }
                }
               
                           
            
            /*Main Fix*/
			cscript.append('''FIX(@Relative("YearTotal",0),&amp;OEP_CurYr,''')
			cscript.append ('''"'''+Version+'''",''')
			if (app.getCurrencyMode()!=CurrencyMode.SINGLE_CURRENCY)
			{
				String sCurrency =  operation.grid.pov.find { it.dimName == 'Currency' }.essbaseMbrName 
                cscript.append ('''"'''+ sCurrency +'''",''')
			}
			cscript.append('''@Relative("'''+entity+'''",0))\n''')
			cscript.append('''	FIX(@Relative("OQP_Adjust Quota",0)''')
            /*Applies Seasonality percentages to Quota*/
			if(CustomRelDimensions.size()>0)
			{
				cscript.append(''','''+CustomRelDimensions.join(''','''));
			}
			cscript.append(''')\n''')
			cscript.append('''		"'''+Scenario+'''"(\n''')			
			cscript.append('''		"'''+Scenario+'''"="'''+Scenario+'''"->YearTotal*('''+strCrossDim+'''"'''+Scenario+'''"->"OQP_Seasonality%"/'''+strCrossDim+'''"'''+Scenario+'''"->"OQP_Seasonality%"->Yeartotal);\n''')
			cscript.append ('''		)\n''')
			cscript.append('''	ENDFIX;\n''')
            /*Aggregates custom dimensions post application of seasonality*/
			if (CustomDimensions.size()>0)
			{
			  cscript.append('''	FIX(@Relative("OQP_Adjust Quota",0),''')
			  cscript.append('''"'''+Scenario+'''")\n''')
              cscript.append('''		AGG(''')
			  cscript.append(CustomDimensions.join(''','''))
              cscript.append(''');\n''')
			  cscript.append('''	ENDFIX;\n''')
			}
			cscript.append('''ENDFIX;\n''')
			 	if (dblSeasonality==0)
                {
               	 	println("Please enter Seasonality percentage.")                   
				}
                else
                {
					println(cscript.toString())
					return cscript.toString();
            	}
			}catch(all) {
					throw new HspRuntimeException('Error occured while executing business rule');
				}				
			
		</script></rule></rules><components/><deployobjects><deployobject product="2" application="salespln" plantype="oep_qtp" obj_id="1" obj_type="1" name="OQP_BOTTOMUP SEASONALITY"/></deployobjects></HBRRepo>